table of contents
TR(1) | Narzędzia tekstowe GNU 2.0 | TR(1) |
NAZWA¶
tr - przetłumacz lub usuń znaki
SKŁADNIA¶
OPIS¶
Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna lub niekompletna. Autorytatywnym źródłem jest obecnie dokumentacja Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń:
Ta strona podręcznika opisuje polecenie tr w wersji GNU. tr kopiuje standardowe wejście na standardowe wyjście, dokonując jednej z poniższych operacji:
- • przekład, opcjonalnie ściśnięcie
powtórzonych znaków w wyniku
• ściśnięcie powtórzonych znaków
• usunięcie znaków
• usunięcie znaków, potem ściśnięcie powtórzonych znaków w wyniku
Argumenty łańcuch1 i (jeśli podany) łańcuch2 definiują uporządkowane zbiory znaków, poniżej nazwane zb1 i zb2. Owe zbiory to znaki z wejścia, na których działa tr. Opcja --complement (-c) zastępuje zb1 jego dopełnieniem (wszystkimi znakami, których nie ma w zb1).
OKREŚLANIE ZBIORÓW ZNAKÓW¶
Format argumentów łańcuch1 i łańcuch2 przypomina format wyrażeń regularnych; jednakowoż, nie są to wyrażenia regularne, lecz tylko listy znaków. Większość znaków w tych łańcuchach reprezentuje po prostu same siebie, ale łańcuchy mogą też, dla wygody, zawierać wyliczone poniżej skróty. Niektórych z nich można użyć tylko w łańcuch1 lub łańcuch2, jak zaznaczono poniżej.
Odwrotny ukośnik, po którym nie następuje znak spośród wymienionych poniżej powoduje komunikat o błędzie.
- \a
- Control-G.
- \b
- Control-H.
- \f
- Control-L.
- \n
- Control-J.
- \r
- Control-M.
- \t
- Control-I.
- \v
- Control-K.
- \ooo
- Znak o wartości podanej przez ooo, czyli od 1 do 3 cyfr ósemkowych.
- \\
- Odwrotny ukośnik.
Zakresy: notacja `m-n' interpretowana jest jako wszystkie znaki od m do n, w porządku rosnącym. m powinno występować w porządku sortowania przed n; jeśli tak nie jest, następuje błąd. Dla przykładu, `0-9' jest tym samym co `0123456789'. Chociaż GNU tr nie obsługuje składni System V używającej nawiasów kwadratowych do zamykania zakresów, tłumaczenia określone w tym formacie nadal będą działać, o ile nawiasy w łańcuch1 odpowiadają identycznym nawiasom w łańcuch2.
Powtórzone znaki: notacja `[c*n]' w łańcuch2 interpretowana jest jako n kopii znaku c. Tak więc `[y*6]' jest tym samym co `yyyyyy'. Notacja `[c*]' w łańcuch2 rozszerzana jest na tyle kopii c, ile potrzeba na to aby zb2 był tak długi jak zb1. Jeśli n zaczyna się od 0, jest reprezentowane ósemkowo, w przeciwnym razie dziesiętnie.
Klasy znaków: notacji `[:nazwa-klasy:]' odpowiadają wszystkie znaki z (predefiniowanej) klasy zwanej nazwa-klasy. Znaki nie są rozszerzane w jakimś szczególnym porządku, z wyjątkiem klas 'upper' i Gdy podano zarówno opcję --delete (-d) jak i --squeeze-repeats (-s) w łańcuch2 można użyć każdej klasy znaków. W przeciwnym razie w łańcuch2 akceptowane są tylko klasy znaków 'upper' i 'lower', i to tylko wtedy, kiedy odpowiednie klasy 'upper' i 'lower' zostały określone na tej samej pozycji względnej w łańcuch1. Takie postępowanie określa konwersję wielkości liter. Nazwy klas podano niżej; jeśli poda się nieprawidłową nazwę klasy, powstaje błąd.
- alnum
- Litery i cyfry.
- alpha
- Litery.
- blank
- Poziomy biały znak.
- cntrl
- Znaki sterujące.
- digit
- Cyfry.
- graph
- Znaki drukowalne, z wyłączeniem spacji.
- lower
- Małe litery.
- Znaki drukowalne, łącznie ze spacją.
- punct
- Znaki interpunkcyjne.
- space
- Pionowy lub poziomy biały znak (odstęp).
- upper
- Duże litery.
- xdigit
- Cyfry szesnastkowe.
Klasy równoważne: składnia `[=c=]' oznacza wszystkie znaki równoważne c, bez szczególnej kolejności. Klasy równoważne to niedawny wynalazek pomyślany dla obsługi alfabetów nie-angielskich. Jednak nie istnieje, zdaje się, standardowa metoda ich zdefiniowania lub określenia ich zawartości. Z tego powodu nie są one w pełni zaimplementowane w GNU tr; klasa równoważna każdego znaku składa się tylko z tego znaku, co obecnie czyni je konstrukcją bezużyteczną.
TŁUMACZENIE¶
tr dokonuje tłumaczenia gdy podane są zarówno łańcuch1 jak i łańcuch2, a nie podano opcji --delete (-d). tr tłumaczy każdy znak swojego wejścia znajdujący się w zb1 na odpowiedni znak w zb2. Znaki, których nie ma w zb1 przepuszczane są w postaci niezmienionej. Gdy jakiś znak pojawia się więcej niż jeden raz w zb1, a odpowiadające mu znaki w zb2 nie są takie same, używany jest tylko ostatni z nich. Dla przykładu, poniższe dwa polecenia są równoważne:
tr aaa xyz tr a z
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]'
Z drugiej strony, podanie zb1 dłuższego od zb2 nie jest przewidziane: POSIX.2 mówi, że rezultat jest niezdefiniowany. W takiej sytuacji tr BSD wydłuża zb2 do długości zb1 powtarzając ostatni znak zb2 tyle razy ile potrzeba. tr z System V obcina zb1 do długości zb2.
Domyślnie, GNU tr załatwia ten przypadek tak jak robi to tr z BSD. Gdy podano opcję --truncate-set1 (-t) GNU tr obsługuje ten przypadek tak jak wersja z System V. Opcja ta jest ignorowana dla operacji innych niż tłumaczenie.
Zachowywanie się jak tr z System V w tym przypadku psuje stosunkowo częsty idiom z BSD:
tr -cs A-Za-z0-9 '\012'
ŚCISKANIE POWTÓRZEŃ I USUWANIE¶
Jeśli podano tylko opcję --delete (-d), tr usuwa z wejścia wszystkie znaki znajdujące się w zb1.
Jeśli podano tylko opcję --squeeze-repeats (-s), tr zastępuje w wejściu każdą sekwencję powtórzonych znaków znajdujących się w zb1 pojedynczym wystąpieniem tegoż znaku.
Jeśli podano zarówno opcję --delete jak i --squeeze-repeats, tr najpierw wykonuje wszelkie usunięcia używając zb1, potem ściska powtórzenia pozostałych znaków używając zb2.
Opcji --squeeze-repeats można także używać podczas tłumaczenia. Wówczas tr najpierw dokonuje tłumaczenia, potem ściska powtórzenia pozostałych znaków używając zb2.
Oto kilka przykładów ilustrujących różne kombinacje opcji:
Usuwanie wszystkich bajtów zerowych:
Umieszczenie każdego słowa w osobnej linii. Konwertuje to wszystkie znaki nie-alfanumeryczne na znaki nowej linii, potem ściska każdy łańcuch powtórzonych nowych linii w pojedynczą nową linię:
Konwersja każdej sekwencji powtórzonych nowych linii w pojedynczą nową linię:
Wyszukiwanie w dokumencie podwójnych wystąpień słów. Na przykład, zdarza się pisanie "do do", powtórzonych słów rozdzielonych znakiem nowej linii. Poniższy skrypt powłoki Bourne'a najpierw zamienia każdą sekwencję znaków interpunkcyjnych i znaków pustych na pojedynczy znak nowej linii. Powoduje to umieszczenie każdego "słowa" w osobnej linii. Następnie zamienia wszystkie duże litery na małe, i, na koniec, uruchamia `uniq' z opcją `-d', co powoduje wypisanie tylko słów, które były powtórzone obok siebie.
#!/bin/sh cat "$@" \
| tr -s '[:punct:][:blank:]' '0 \
| tr '[:upper:]' '[:lower:]' \
| uniq -d
GNU tr akceptuje także następujące opcje, w kombinacji z innymi:
KOMUNIKATY OSTRZEGAWCZE¶
Ustawienie zmiennej środowiskowej POSIXLY_CORRECT wyłącza niektóre ostrzeżenia i komunikaty o błędach, dla ścisłej zgodności z POSIX.2. Komunikaty te występują normalnie w następujących okolicznościach:
1. Gdy podano opcję --delete, ale nie --squeeze-repeats, a podano łańcuch2, GNU tr domyślnie wypisuje komunikat o użyciu i kończy pracę, ponieważ łańcuch2 nie zostałby użyty. Specyfikacja POSIX mówi, że łańcuch2 należy w tej sytuacji zignorować. Jednak milczące ignorowanie argumentów to zły pomysł.
2. Gdy podano niejednoznaczne specjalne sekwencje ósemkowe. Dla przykładu, \400 to faktycznie \40 plus cyfra 0, ponieważ ósemkowa wartość 400 nie mieści się w pojedynczym bajcie.
Zauważ że GNU tr nie zapewnia pełnej zgodności z BSD lub System V. Dla przykładu, nie istnieje opcja wyłączająca interpretację konstrukcji POSIX-owych [:alpha:], [=c=], i [c*10]. GNU tr nie usuwa także automatycznie bajtów zerowych, w odróżnieniu od tradycyjnych wersji UNIXowych, w których nie ma sposobu zachowania bajtów zerowych.
ZGŁASZANIE BŁĘDÓW¶
Błędy proszę zgłaszać, w jęz. ang., do <bug-textutils@gnu.org>.
COPYRIGHT¶
Copyright © 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
ZOBACZ TAKŻE¶
OD TŁUMACZA¶
Zaktualizowano i poszerzono wg dokumentacji Texinfo dla narzędzi tekstowych GNU wersji 2.0.
FSF | sierpień 1999 |